/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package GestionPaginas;
import java.util.ArrayList;
import java.util.List;
/**
*
* @author EdisonPC
*/
public class Tupla {
/** Identificador de la tupla. */
private IdentificadorTupla idTupla;
/** Valores almacenados en la tupla. */
private List<Comparable> valores;
/**
* Constructor de una nueva <code>Tupla</code> vácia.
*/
public Tupla() {
this.idTupla = null;
this.valores = new ArrayList<Comparable>();
} // Tupla()
/**
* Constructor de una nueva tupla dado un identificador y
* <code>Lista</code> de valores.
*
* @param idTupla, identificador de la tupla.
* @param valores el valores a ser añadidos.
 * */
public Tupla(IdentificadorTupla idTupla, List<Comparable> valores) {
this.idTupla = idTupla;
this.valores = valores;
} // Tupla()
/**
* Devolver el identificador de la tupla.
*
* @return el identificador de la tupla.
*/
public IdentificadorTupla getIdTupla() {
return idTupla;
} // getIdTupla()
/**
* Cambiar el valor de una celda de la tupla.
*
* @param celda, la celda de la tupla a la que se accede.
* @param valor, el nuevo valor en la celda de la tupla.
*/
public void setValor(int celda, Comparable valor) {
valores.set(celda, valor);
} // setValor()
/**
* Cambia los valores de la tupla.
*
* @param valores, una lista de los valores nuevos.
*/
public void setValores(List<Comparable> values) {
this.valores.clear();
this.valores = values;
}
// setValores()
/**
* Devuelve la cantidad de celdas de la tupla.
*
* @return numero de celdas en la tupla.
*/
public int size() {
return valores.size();
} // size()
/**
* Devuelve los valores de la tupla.
*
* @return valores de la tupla.
*/
public List<Comparable> getValores() {
return valores;
} // getValores()
/**
* Devolver la celda de una tupla como tipo primitivo character.
*
* @param celda, la celda de la <code>Tupla</code> accedida.
* @return un celda específica de la tupla como un tipo primitivo
* character.
*
*/
public char asChar(int celda) {
Character c = (Character) valores.get(celda);
return c.charValue();
} // asChar()
/**
* Devolver la celda de una tupla como tipo primitivo Byte.
*
* @param celda, la celda de la <code>Tupla</code> accedida.
* @return un celda específica de la tupla como un tipo primitivo
* Byte.
*
*/
public byte asByte(int celda) {
Byte b = (Byte) valores.get(celda);
return b.byteValue();
} // asByte()
/**
* Devolver la celda de una tupla como tipo primitivo Short.
*
* @param celda, la celda de la <code>Tupla</code> accedida.
* @return un celda específica de la tupla como un tipo primitivo
* Short.
*
*/
public short asShort(int celda) {
Short s = (Short) valores.get(celda);
return s.shortValue();
} // asShort()
/**
* Devolver la celda de una tupla como tipo primitivo int.
*
* @param celda, la celda de la <code>Tupla</code> accedida.
* @return un celda específica de la tupla como un tipo primitivo
* int.
*
*/
public int asInt(int celda) {
Integer in = (Integer) valores.get(celda);
return in.intValue();
} // asInt()
/**
* Devolver la celda de una tupla como tipo primitivo Long.
*
* @param celda, la celda de la <code>Tupla</code> accedida.
* @return un celda específica de la tupla como un tipo primitivo
* long.
*
*/
public long asLong(int celda){
Long l = (Long) valores.get(celda);
return l.longValue();
} // asLong()
/**
 *
 */
/*
* Devolver la celda de una tupla como tipo primitivo float.
*
* @param celda, la celda de la <code>Tupla</code> accedida.
* @return un celda específica de la tupla como un tipo primitivo
* float.
*
*/
public float asFloat(int celda){
Float f = (Float) valores.get(celda);
return f.floatValue();
} // asFloat()
/**
* Devolver la celda de una tupla como tipo primitivo double.
*
* @param celda, la celda de la <code>Tupla</code> accedida.
* @return un celda específica de la tupla como un tipo primitivo
* double.
*
*/
public double asDouble(int celda){
Double doub = (Double) valores.get(celda);
return doub.doubleValue();
} // asDouble()
/**
* Devolver la celda de una tupla como tipo primitivo String.
*
* @param celda, la celda de la <code>Tupla</code> accedida.
* @return un celda específica de la tupla como un tipo primitivo
* String.
*
*/
public String asString(int celda) {
String str = (String) valores.get(celda);
return str;
} // asString()
/**
* Devolver la celda especificada de la tupla como generic
* Comparable.
*
* @param celda, la celda de la <code>Tupla</code> accedida.
* @return la celda especifica de la tupla como generic
Comparable.
*/
public Comparable getValor(int celda) {
return valores.get(celda);
} // getValue()
/**
* probar la igualdad de objetos.
*
* @param o objeto a comparar con la tupla.
* @return <code>true</code> si la tupla es igual a
* <code>o</code>, <code>false</code> caso contrario.
*/
@Override
public boolean equals(Object o) {
if (o == this) {
return true;
}
if (!(o instanceof Tupla)) {
return false;
}
Tupla t = (Tupla) o;
if (size() != t.size()) {
return false;
}
if (!getIdTupla().equals(t.getIdTupla())) {
return false;
}
int i = 0;
for (Comparable comp : valores) {
if (!comp.equals(t.getValor(i))) {
return false;
}
i++;
}
return true;
}
/**
* Devolver el hash code de la tupla.
*
* @return un hash code de la tupla.
*/
@Override
public int hashCode() {
int hash = 17;
hash += 31 * hash + getIdTupla().hashCode();
for (Comparable comp : valores) {
hash += 31 * hash + comp.hashCode();
}
return hash;
}
/**
* Representación Textual.
*/
@Override
public String toString() {
return idTupla.toString() + " : " + valores.toString();
} // toString()
}